

/*
变量提升是指在 JavaScript 代码执行过程中，
JavaScript 引擎把变量的声明部分和函数的声明部分提升到代码开头的行为。变量被提升后，会给变量设置默认值为 undefined
console.log(num) 

*/
var num;
console.log(num);
num = 1


// 在函数作用域中也存在变量提升：
function getNum() {
    var num;
    console.log(num) 
    num = 1  
}
getNum()


// 当使用变量形式声明函数时，和普通的变量一样会存在提升的现象，
fn()
var fn = function () {
    console.log(1)  
}
// 输出结果：Uncaught TypeError: fn is not a function


// 而函数声明式会提升到作用域最前边，并且将声明内容一起提升到最上边。如下：
foo()
function foo () {
    console.log(2)
}
// 输出结果：2


var name = "JavaScript"
function showName(){
    var name;
    console.log(name);
    if(0){
        name = "CSS"
    }
}
showName()


function foo(){
    for (var i = 0; i < 5; i++) {

    }
    console.log(i); 
}
foo()
// let const